﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using SIMA.Core.Data.Access;
using SIMA.Core.Data.Collection;
using SIMA.Controls;
using SIMA.Core.Enums;
using SIMA.Entities;

namespace SIMA.Client.Auxiliars.MVVM
{
    public class AdminTipoMantenimientoMvvm:AccessClass<T_C_TipoMantenimiento>
    {
        #region Consts

        private const string IDTABLA = "21";

        #endregion

        #region Fields

        private List<T_C_TipoMantenimiento> tipoMantenimientos;
        private List<T_C_Estado> estados;
        private SmartContainer<T_C_TipoMantenimiento> TipoMantenimientoSmart;
        private SmartContainer<T_C_Estado> estadosSmart;
        private FilterType filtro;

        #endregion

        #region Properties

        public List<T_C_TipoMantenimiento> TipoMantenimientos
        {
            get { return tipoMantenimientos; }
            set
            {
                tipoMantenimientos = value;
                this.RaisePropertyChanged("TipoMantenimientos");
            }
        }

        public List<T_C_Estado> Estados
        {
            get
            {
                return estados;
            }
            set
            {
                estados = value;
                this.RaisePropertyChanged("Estados");
            }
        }

        public FilterType Filtro
        {
            get
            {
                return filtro;
            }
            set
            {
                filtro = value;
                this.RaisePropertyChanged("Filtro");
                SelectSpecialized();
            }
        }

        #endregion

        #region Constructor

        public AdminTipoMantenimientoMvvm()
        {
            Init();
        }

        #endregion

        #region Destructor

        ~AdminTipoMantenimientoMvvm()
        {
            this.Dispose();
        }
        #endregion

        #region Private Methods

        private void Init()
        {
            DataAccess.SetConnection(SIMA.Core.Enums.AccessType.FromString, CADCONNECTIONSTRING);
            TipoMantenimientoSmart = new SmartContainer<T_C_TipoMantenimiento>();
            TipoMantenimientoSmart.Inserted += new EventHandler<SIMA.Core.EventArgs.InsertedEventArgs>(smartTipoMantenimiento_Inserted);
            TipoMantenimientoSmart.Deleted += new EventHandler<SIMA.Core.EventArgs.DeletedEventArgs>(smartTipoMantenimiento_Deleted);
            TipoMantenimientoSmart.Updated += new EventHandler<SIMA.Core.EventArgs.UpdatedEventArgs>(smartTipoMantenimiento_Updated);
            //TipoMantenimientoSmart.CollectionChanged += new EventHandler(smartTipoMantenimiento_CollectionChanged);
            TipoMantenimientoSmart.Failed += new EventHandler<SIMA.Core.EventArgs.FailedEventArgs>(smartTipoMantenimiento_Failed);
            estadosSmart = new SmartContainer<T_C_Estado>(false);
            StringBuilder strBuilder = new StringBuilder();
            strBuilder.Append("Id_Tabla = ");
            strBuilder.Append(IDTABLA);
            Estados = estadosSmart[strBuilder.ToString(), CommandType.CommandText];
            Filtro = FilterType.Active;
        }

        //void smartTipoMantenimiento_CollectionChanged(object sender, EventArgs e)
        //{
        //    tipoMantenimientos = TipoMantenimientoSmart.ToList();
        //}

        void smartTipoMantenimiento_Updated(object sender, SIMA.Core.EventArgs.UpdatedEventArgs e)
        {
            SIMAMessageBox.Show(e.InstantUpdated.ToLongTimeString(), "Actualización Realizada.", e.QueryString, SIMAMessageBoxButtons.OK, SIMAMessageBoxImage.Information);
            SelectSpecialized();
        }

        void smartTipoMantenimiento_Deleted(object sender, SIMA.Core.EventArgs.DeletedEventArgs e)
        {
            SIMAMessageBox.Show(e.InstantDeleted.ToLongTimeString(), "Eliminación Realizada.", e.QueryString, SIMAMessageBoxButtons.OK, SIMAMessageBoxImage.Information);
            SelectSpecialized();
        }

        void smartTipoMantenimiento_Inserted(object sender, SIMA.Core.EventArgs.InsertedEventArgs e)
        {
            SIMAMessageBox.Show(e.InstantInserted.ToLongTimeString(), "Registro Realizado", e.QueryString, SIMAMessageBoxButtons.OK, SIMAMessageBoxImage.Information);
            SelectSpecialized();
        }

        void smartTipoMantenimiento_Failed(object sender, SIMA.Core.EventArgs.FailedEventArgs e)
        {
            SIMAMessageBox.Show(e.InstantFailed.ToLongTimeString(), e.ExceptionOcurred.Message, e.QueryString, SIMAMessageBoxButtons.OK, SIMAMessageBoxImage.Error);
        }

        #endregion

        #region Public Methods

        public override void Register(T_C_TipoMantenimiento item)
        {
            TipoMantenimientoSmart.Add(item);
        }

        public override void Delete(T_C_TipoMantenimiento item)
        {
            TipoMantenimientoSmart.Remove(item);
        }

        public override void Update(T_C_TipoMantenimiento itemToUpdate, T_C_TipoMantenimiento itemUpdated)
        {
            TipoMantenimientoSmart.Update(itemToUpdate, itemUpdated);
        }

        public override void SelectAll()
        {
            TipoMantenimientoSmart.SelectAll();
            TipoMantenimientos = TipoMantenimientoSmart.ToList();
        }

        public void SelectSpecialized()
        {
            switch (Filtro)
            {
                case FilterType.Active:
                    TipoMantenimientos = TipoMantenimientoSmart["SelectActiveTipoMovimiento", CommandType.StoredProcedure];
                    break;
                case FilterType.Inactive:
                    TipoMantenimientos = TipoMantenimientoSmart["SelectInactiveTipoMovimiento", CommandType.StoredProcedure];
                    break;
            }
        }
        #endregion

        
    }
}
